package com.seng.userservice.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.seng.userservice.entity.OssEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

@Component
public class AliOSSUtils {

    @Autowired
    private OssEntity ossEntity;

    /**
     * 创建节点
     */
    public void createBucket(){
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ossEntity.getEndpoint(), ossEntity.getAccessKeyId(), ossEntity.getAccessKeySecret());

        // 创建存储空间。
        ossClient.createBucket(ossEntity.getBucketName());

        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 下载文件
     * @param file
     */
    public void uploadImgFile(MultipartFile file){
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ossEntity.getEndpoint(), ossEntity.getAccessKeyId(), ossEntity.getAccessKeySecret());
        //上传文件流
        try {
            ossClient.putObject(ossEntity.getBucketName(),"b.jpg",file.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 通过流下载文件
     */
    public void downloadImgFile(){
// 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ossEntity.getEndpoint(), ossEntity.getAccessKeyId(), ossEntity.getAccessKeySecret());

// 调用ossClient.getObject返回一个OSSObject实例，该实例包含文件内容及文件元信息。
        OSSObject ossObject = ossClient.getObject(ossEntity.getBucketName(), "b.jpg");
// 调用ossObject.getObjectContent获取文件输入流，可读取此输入流获取其内容。
        InputStream content = ossObject.getObjectContent();
        if (content != null) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            while (true) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(line == null){
                    break;
                }
                System.out.println("\n" + line);
            }
            // 数据读取完成后，获取的流必须关闭，否则会造成连接泄漏，导致请求无连接可用，程序无法正常工作。
            try {
                content.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

// 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 下载文件到本地
     */
    public void downloadImgToLode(){
       // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ossEntity.getEndpoint(), ossEntity.getAccessKeyId(), ossEntity.getAccessKeySecret());

        // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖，不存在则新建。
        ossClient.getObject(new GetObjectRequest(ossEntity.getBucketName(), "b.jpg"), new File("D:\\b.jpg"));

        // 关闭OSSClient。
        ossClient.shutdown();
    }
}
